/**
 * 字典模块注册器
 * 用于管理和注册各模块的字典类型
 * 提供模块字典类型的注册、查询和管理功能
 */
import { DICT_TYPE, type ModuleDictTypes } from './types';
import { SYSTEM_MODULE_INFO } from './system';
import { BOM_MODULE_INFO } from './bom';
import { PRODUCT_MODULE_INFO } from './product';
import { INVENTORY_MODULE_INFO } from './inventory';
import { AI_MODULE_INFO } from './ai';

// 模块字典类型注册表
export const MODULE_DICT_REGISTRY: ModuleDictTypes = {};

/**
 * 注册模块字典类型
 * @param moduleName 模块名称
 * @param dictTypes 字典类型数组
 * @example
 * ```typescript
 * // 注册BOM模块字典类型
 * registerModuleDictTypes('bom', [
 *   DICT_TYPE.BOM_TYPE,
 *   DICT_TYPE.BOM_STATUS,
 *   DICT_TYPE.MATERIAL_TYPE
 * ]);
 * ```
 */
export function registerModuleDictTypes(moduleName: string, dictTypes: DICT_TYPE[]): void {
  MODULE_DICT_REGISTRY[moduleName] = dictTypes;
}

/**
 * 获取指定模块的字典类型列表
 * @param moduleName 模块名称
 * @returns 字典类型数组，如果模块不存在则返回空数组
 * @example
 * ```typescript
 * const bomDictTypes = getModuleDictTypes('bom');
 * console.log(bomDictTypes); // ['bom_type', 'bom_status', ...]
 * ```
 */
export function getModuleDictTypes(moduleName: string): DICT_TYPE[] {
  return MODULE_DICT_REGISTRY[moduleName] || [];
}

/**
 * 获取所有已注册的模块名称列表
 * @returns 模块名称数组
 * @example
 * ```typescript
 * const modules = getAllRegisteredModules();
 * console.log(modules); // ['system', 'bom', 'product', 'inventory', 'ai']
 * ```
 */
export function getAllRegisteredModules(): string[] {
  return Object.keys(MODULE_DICT_REGISTRY);
}

/**
 * 根据字典类型获取其所属模块名称
 * @param dictType 字典类型
 * @returns 模块名称，如果字典类型未注册则返回null
 * @example
 * ```typescript
 * const module = getDictModule(DICT_TYPE.BOM_TYPE);
 * console.log(module); // 'bom'
 * ```
 */
export function getDictModule(dictType: DICT_TYPE): string | null {
  for (const [module, dictTypes] of Object.entries(MODULE_DICT_REGISTRY)) {
    if (dictTypes.includes(dictType)) {
      return module;
    }
  }
  return null;
}

/**
 * 初始化所有模块字典类型
 * 在应用启动时调用，注册所有预定义的模块字典类型
 * @example
 * ```typescript
 * // 应用启动时初始化
 * initializeModuleDictTypes();
 * ```
 */
export function initializeModuleDictTypes(): void {
  // 注册系统模块字典类型
  registerModuleDictTypes(SYSTEM_MODULE_INFO.name, SYSTEM_MODULE_INFO.dictTypes);
  
  // 注册BOM模块字典类型
  registerModuleDictTypes(BOM_MODULE_INFO.name, BOM_MODULE_INFO.dictTypes);
  
  // 注册产品模块字典类型
  registerModuleDictTypes(PRODUCT_MODULE_INFO.name, PRODUCT_MODULE_INFO.dictTypes);
  
  // 注册库存模块字典类型
  registerModuleDictTypes(INVENTORY_MODULE_INFO.name, INVENTORY_MODULE_INFO.dictTypes);
  
  // 注册AI模块字典类型
  registerModuleDictTypes(AI_MODULE_INFO.name, AI_MODULE_INFO.dictTypes);
}

/**
 * 检查字典类型是否属于指定模块
 * @param dictType 字典类型
 * @param moduleName 模块名称
 * @returns 如果字典类型属于指定模块则返回true，否则返回false
 * @example
 * ```typescript
 * const isBomType = isDictTypeOfModule(DICT_TYPE.BOM_TYPE, 'bom'); // true
 * const isSystemType = isDictTypeOfModule(DICT_TYPE.BOM_TYPE, 'system'); // false
 * ```
 */
export function isDictTypeOfModule(dictType: DICT_TYPE, moduleName: string): boolean {
  const moduleDictTypes = getModuleDictTypes(moduleName);
  return moduleDictTypes.includes(dictType);
}